home *** CD-ROM | disk | FTP | other *** search
- /*
- * cstructs.h - structures and accompanying manifest constants for functions
- * in the common subdirectory.
- */
-
- /*
- * cal_time holds a calendar time.
- */
- struct cal_time {
- int year; /* yyyy */
- int month_no; /* month number: 1-12 */
- char *month_nm; /* month name: "January", "February", ... */
- int mday; /* day of the month */
- char *wday; /* "Sunday", "Monday", ... */
- int hour; /* hour by 24 hr clock */
- int minute;
- int second;
- };
-
- /*
- * fileparts holds a file name broken down into parts.
- */
-
-
- struct fileparts { /* struct of file name parts */
- char *dir; /* directory */
- char *name; /* name */
- char *ext; /* extension */
-
- #if VMS
- char *version;
- #endif /* VMS */
-
- #if MVS
- char *member;
- #endif /* MVS */
-
- };
-
- /*
- * xval - holds references to literal constants
- */
- union xval {
- long ival; /* integer */
- double rval; /* real */
- word sval; /* offset into string space of string */
- };
-
-
- /*
- * str_buf references a string buffer. Strings are built a character
- * at a time. When a buffer "fragment" is filled, another is allocated
- * and the the current string copied to it.
- */
- struct str_buf_frag {
- struct str_buf_frag *next; /* next buffer fragment */
- char s[1]; /* variable size buffer, really > 1 */
- };
-
- struct str_buf {
- unsigned int size; /* total size of current buffer */
- char *strtimage; /* start of string currently being built */
- char *endimage; /* next free character in buffer */
- char *end; /* end of current buffer */
- struct str_buf_frag *frag_lst; /* list of buffer fragments */
- struct str_buf *next; /* buffers can be put on free list */
- };
-
- /*
- * implement contains information about the implementation of an operation.
- */
- #define NoRsltSeq -1L /* no result sequence: {} */
- #define UnbndSeq -2L /* unbounded result sequence: {*} */
-
- #define DoesRet 01 /* operation (or "body" function) returns */
- #define DoesFail 02 /* operation (or "body" function) fails */
- #define DoesSusp 04 /* operation (or "body" function) suspends */
- #define DoesEFail 010 /* fails through error conversion */
- #define DoesFThru 020 /* only "body" functions can "fall through" */
-
- struct implement {
- struct implement *blink; /* link for bucket chain in hash tables */
- char oper_typ; /* 'K'=keyword, 'F'=function, 'O'=operator */
- char prefix[2]; /* prefix to make start of name unique */
- char *name; /* function/operator/keyword name */
- char *op; /* operator symbol (operators only) */
- int nargs; /* number of arguments operation requires */
- int *arg_flgs; /* array of arg flags: deref/underef, var len*/
- long min_result; /* minimum result sequence length */
- long max_result; /* maiximum result sequence length */
- int resume; /* flag - resumption after last result */
- int ret_flag; /* DoesRet, DoesFail, DoesSusp */
- int use_rslt; /* flag - explicitly uses result location */
- char *comment; /* description of operation */
- int ntnds; /* size of tnds array */
- struct tend_var *tnds; /* pointer to array of info about tended vars */
- int nvars; /* size of vars array */
- struct ord_var *vars; /* pointer to array of info about ordinary vars */
- struct il_code *in_line; /* inline version of the operation */
- int iconc_flgs; /* flags for internal use by the compiler */
- };
-
- /*
- * These codes are shared between the data base and rtt. They are defined
- * here, though not all are used by the data base.
- */
- #define TndDesc 1 /* a tended descriptor */
- #define TndStr 2 /* a tended character pointer */
- #define TndBlk 3 /* a tended block pointer */
- #define OtherDcl 4 /* a declaration that is not special */
- #define IsTypedef 5 /* a typedef */
- #define VArgLen 6 /* identifier for length of variable parm list */
- #define RsltLoc 7 /* the special result location of an operation */
- #define Label 8 /* label */
- #define RtParm 16 /* undereferenced parameter of run-time routine */
- #define DrfPrm 32 /* dereferenced parameter of run-time routine */
- #define VarPrm 64 /* variable part of parm list (with RtParm or DrfPrm) */
- #define PrmMark 128 /* flag - used while recognizing params of body fnc */
- #define ByRef 256 /* flag - parameter to body function passed by reference */
-
- /*
- * Flags to indicate what types are returned from the function implementing
- * a body. These are unsed in determining the calling conventions
- * of the function.
- */
- #define RetInt 1 /* body/function returns a C_integer */
- #define RetDbl 2 /* body/function returns a C_double */
- #define RetOther 4 /* body (not function itself) returns something else */
- #define RetNoVal 8 /* function returns no value */
- #define RetSig 16 /* function returns a signal */
-
- /*
- * tend_var contains information about a tended variable in the "declare {...}"
- * action of an operation.
- */
- struct tend_var {
- int var_type; /* TndDesc, TndStr, or TndBlk */
- struct il_c *init; /* initial value from declaration */
- char *blk_name; /* TndBlk: struct name of block */
- };
-
- /*
- * ord_var contains information about an ordinary variable in the
- * "declare {...}" action of an operation.
- */
- struct ord_var {
- char *name; /* name of variable */
- struct il_c *dcl; /* declaration of variable (includes name) */
- };
-
- /*
- * il_code has information about an action in an operation.
- */
- #define IL_If1 1
- #define IL_If2 2
- #define IL_Tcase1 3
- #define IL_Tcase2 4
- #define IL_Lcase 5
- #define IL_Err1 6
- #define IL_Err2 7
- #define IL_Lst 8
- #define IL_Const 9
- #define IL_Bang 10
- #define IL_And 11
- #define IL_Cnv1 12
- #define IL_Cnv2 13
- #define IL_Def1 14
- #define IL_Def2 15
- #define IL_Is 16
- #define IL_Var 17
- #define IL_Subscr 18
- #define IL_Block 19
- #define IL_Call 20
- #define IL_Abstr 21
- #define IL_VarTyp 22
- #define IL_Store 23
- #define IL_Compnt 24
- #define IL_TpAsgn 25
- #define IL_Union 26
- #define IL_Inter 27
- #define IL_New 28
- #define IL_IcnTyp 29
- #define IL_Acase 30
-
- #define CM_Fields -1
-
- union il_fld {
- struct il_code *fld;
- struct il_c *c_cd;
- int *vect;
- char *s;
- word n;
- };
-
- struct il_code {
- int il_type;
- union il_fld u[1]; /* actual number of fields varies with type */
- };
-
- /*
- * The following manifest constants are used to describe types, conversions,
- * and returned values. Non-negative numbers are reserved for types described
- * in the type specification system.
- */
- #define TypAny -1
- #define TypEmpty -2
- #define TypVar -3
- #define TypCInt -4
- #define TypCDbl -5
- #define TypCStr -6
- #define TypEInt -7
- #define TypECInt -8
- #define TypTStr -9
- #define TypTCset -10
- #define RetDesc -11
- #define RetNVar -12
- #define RetSVar -13
- #define RetNone -14
-
- /*
- * il_c describes a piece of C code.
- */
- #define ILC_Ref 1 /* nonmodifying reference to var. in sym. tab. */
- #define ILC_Mod 2 /* modifying reference to var. in sym. tab */
- #define ILC_Tend 3 /* tended var. local to inline block */
- #define ILC_SBuf 4 /* string buffer */
- #define ILC_CBuf 5 /* cset buffer */
- #define ILC_Ret 6 /* return statement */
- #define ILC_Susp 7 /* suspend statement */
- #define ILC_Fail 8 /* fail statement */
- #define ILC_Goto 9 /* goto */
- #define ILC_CGto 10 /* conditional goto */
- #define ILC_Lbl 11 /* label */
- #define ILC_LBrc 12 /* '{' */
- #define ILC_RBrc 13 /* '}' */
- #define ILC_Str 14 /* arbitrary string of code */
- #define ILC_EFail 15 /* errorfail statement */
-
- #define RsltIndx -1 /* symbol table index for "result" */
-
- struct il_c {
- int il_c_type;
- struct il_c *code[3];
- word n;
- char *s;
- struct il_c *next;
- };
-
- /*
- * The parameter value of a run-time operation may be in one of several
- * different locations depending on what conversions have been done to it.
- * These codes are shared by rtt and iconc.
- */
- #define PrmTend 1 /* in tended location */
- #define PrmCStr 3 /* converted to C string: tended location */
- #define PrmInt 4 /* converted to C int: non-tended location */
- #define PrmDbl 8 /* converted to C double: non-tended location */
-
- /*
- * Kind of RLT return statement supported.
- */
- #define TRetNone 0 /* does not support an RTL return statement */
- #define TRetBlkP 1 /* block pointer */
- #define TRetDescP 2 /* descriptor pointer */
- #define TRetCharP 3 /* character pointer */
- #define TRetCInt 4 /* C integer */
- #define TRetSpcl 5 /* RLT return statement has special form & semenatics */
-
- /*
- * Codes for dereferencing needs.
- */
- #define DrfNone 0 /* not a variable type */
- #define DrfGlbl 1 /* treat as a global variable */
- #define DrfCnst 2 /* type of values in variable doesn't change */
- #define DrfSpcl 3 /* special dereferencing: trapped variable */
-
- /*
- * Information about an Icon type.
- */
- struct icon_type {
- char *id; /* name of type */
- int support_new; /* supports RTL "new" construct */
- int deref; /* dereferencing needs */
- int rtl_ret; /* kind of RTL return supported if any */
- char *typ; /* for variable: initial type */
- int num_comps; /* for aggregate: number of type components */
- int compnts; /* for aggregate: index of first component */
- char *abrv; /* abreviation used for type tracing */
- char *cap_id; /* name of type with first character capitalized */
- };
-
- /*
- * Information about a component of an aggregate type.
- */
- struct typ_compnt {
- char *id; /* name of component */
- int n; /* position of component within type aggragate */
- int var; /* flag: this component is an Icon-level variable */
- int aggregate; /* index of type that owns the component */
- char *abrv; /* abreviation used for type tracing */
- };
-
- extern int num_typs; /* number of types in table */
- extern struct icon_type icontypes[]; /* table of icon types */
-
- /*
- * Type inference needs to know where most of the standard types
- * reside. Some have special uses outside operations written in
- * RTL code, such as the null type for initializing variables, and
- * others have special semantics, such as trapped variables.
- */
- extern int str_typ; /* index of string type */
- extern int int_typ; /* index of integer type */
- extern int rec_typ; /* index of record type */
- extern int proc_typ; /* index of procedure type */
- extern int coexp_typ; /* index of co-expression type */
- extern int stv_typ; /* index of sub-string trapped var type */
- extern int ttv_typ; /* index of table-elem trapped var type */
- extern int null_typ; /* index of null type */
- extern int cset_typ; /* index of cset type */
- extern int real_typ; /* index of real type */
- extern int list_typ; /* index of list type */
- extern int tbl_typ; /* index of table type */
-
- extern int num_cmpnts; /* number of aggregate components */
- extern struct typ_compnt typecompnt[]; /* table of aggregate components */
- extern int str_var; /* index of trapped string variable */
- extern int trpd_tbl; /* index of trapped table */
- extern int lst_elem; /* index of list element */
- extern int tbl_val; /* index of table element value */
- extern int tbl_dflt; /* index of table default */
-
- /*
- * minimum number of unsigned ints needed to hold the bits of a cset - only
- * used in translators, not in the run-time system.
- */
- #define BVectSize 16
-